#define _CRT_SECURE_NO_WARNINGS 1
class Solution {
public:
	vector<vector<int>> levelOrder(TreeNode* root) {
		vector<vector<int>> vv; // 存储最终结果
		queue<TreeNode*> q;     // 辅助队列，用于层序遍历
		int LevelSize = 0;      // 当前层的节点数
		vector<int> v;    // 存储当前层的节点值

		if (root != nullptr) { // 如果根节点不为空
			q.push(root);      // 将根节点入队
			LevelSize = 1;     // 当前层节点数为 1
		}

		while (!q.empty())                 // 当队列不为空时，继续遍历
		{

			while (LevelSize--)            // 遍历当前层的所有节点
			{
				TreeNode* cur = q.front();  // 取出队头节点

				if (cur->left != nullptr)  // 如果左子节点不为空
				{
					q.push(cur->left);      // 将左子节点入队
				}

				if (cur->right != nullptr)  // 如果右子节点不为空
				{
					q.push(cur->right);      // 将右子节点入队
				}

				v.push_back(cur->val); // 将当前节点的值存入当前层的数组
				q.pop();               // 当前节点处理完毕，出队

			}

			LevelSize = q.size(); // 更新下一层的节点数
			vv.push_back(v);      // 将当前层的节点值数组存入结果
		}
		return vv; // 返回最终结果
	}
};